#include<iostream>
#include<unistd.h>
#include <cerrno>
#include <cstring>
#include <string.h>
#include<signal.h>
#include<sys/types.h>

using namespace std;

// void handler(int signo)
// {
//     cout<<"get a sig,number is:"<<signo<<endl;
// }

// int main()
// {
//     signal(SIGINT,handler);
//     while(1)
//     {
//         cout<<"I am activing...,pid:"<<getpid()<<endl;
//         sleep(1);
//     }
//     return 0;
// }

// int main(int argc, char *argv[])
// {
//     if(argc != 3)
//     {
//         cout << "Usage: " << argv[0] << " -signumber pid" << endl;
//         return 1;
//     }

//     int signumber = stoi(argv[1]+1);
//     int pid = stoi(argv[2]);

//     int n = kill(pid, signumber);
//     if(n < 0)
//     {
//         cerr << "kill error, " << strerror(errno) << endl;
//     }

//     return 0;
// }

// int main()
// {
//     cout<<"开始运行..."<<endl;
//     sleep(1);
//     abort();
//     cout<<"运行结束"<<endl;
//     return 0;
// }
// int cnt = 0;
// void handler(int sig)
// {
//     std::cout << "get a sig: " << sig << " cnt: " << cnt << std::endl;
//     alarm(1);
// }

// int main()
// {
//     //设定一个闹钟
//     signal(SIGALRM,handler);
//     alarm(5);
//     while(true)
//     {
//         cnt++;
//     }
//     return 0;
// }   

// int g_cnt = 0;
// void handler(int sig)
// {
//     std::cout << "get a sig: " << sig << " g_cnt: " << g_cnt << std::endl;
//     unsigned int n = alarm(5);

//     cout << "还剩多少时间: " << n << endl;
//     exit(0);
// }

// int main()
// {
//     //设定一个闹钟
//     signal(SIGALRM,handler);
//     alarm(5);
//     while(true)
//     {
//         g_cnt++;
//     }
//     int cnt = 0;
//     while(true)
//     {
//         sleep(1);
//         cout << "cnt : " << cnt++ << ", pid is : "<< getpid() << endl; //IO其实很慢
//         if(cnt == 2)
//         {
//             int n = alarm(0); // alarm(0): 取消闹钟
//             cout << " alarm(0) ret : " << n << endl;
//         }
//     }

//     return 0;
// }
// void handler(int sig)
// {
//     cout<<"get a sig:"<<sig<<endl;
//     exit(1);
// }

// int main()
// {
//     signal(SIGFPE,handler);
//     int a = 10;
//     a /= 0;
//     while(1)
//     {
//         sleep(1);
//     }
//     return 0;
// }


void handler(int sig)
{
    cout<<"get a sig:"<<sig<<endl;
    exit(1);
}
int main()
{
    signal(SIGSEGV, handler);
    sleep(1);
    int *p = NULL;
    *p = 100;
    while(1)
    {
        sleep(1);
    }
    return 0;
}